#endcoding: utf-8
class Backend::LibraryController < ApplicationController
  before_filter :check_admin_priviledge

  def index
    @documents = LibraryDocument.order(sort_column(LibraryDocument) + " " + sort_direction).page(params[:page]).per(10)
    #redirect_to :controller => "backend/library", :action => "lend_document"
  end

  def new
    #add new document
    @access_attr = LibraryDocument.column_names - ["id", "edited_on", "created_on", "view_count", "lend_count", "category_id"]
    if request.get?
      #display form
      @doc = LibraryDocument.new()
    else
      #add new action
      #params[:doc][:in_store_on] = params[:doc][:in_store_on][:date]+' '+params[:doc][:in_store_on][:time]
      @doc = params[:doc]
      flash[:alert] = []
      if @doc[:title].empty?
        flash[:alert] << "Tiêu đề không được bỏ trống"
      end
      if @doc[:author].empty?
        flash[:alert] << "Tên tác giả không được bỏ trống"
      end
      if flash[:alert].empty?
        #if there's no error
        #do save the info
        obj = LibraryDocument.new(@doc)
        if obj.save
          flash[:notice] = "Đã thêm tài liệu mới"
          redirect_to_library
        end
      end
    end
  end

  def edit
    #edit document info
    selected = LibraryDocument.column_names - ["category_id", "id", "edited_on", "view_count", "lend_count", "created_on"]
    @document = LibraryDocument.find_by_id(params[:document_id], :select => selected)
    if @document.nil?
      flash[:alert] = "Không tìm thấy tài liệu ID: " + params[:document_id].to_s
      redirect_to_library
    end
    if request.post?
      params[:doc][:in_store_on] = params[:doc][:in_store_on][:date]+' '+params[:doc][:in_store_on][:time]
      if LibraryDocument.update(params[:document_id].to_i, params[:doc])
        flash[:notice] = "Đã cập nhật thông tin tài liệu"
        redirect_to request.fullpath
      end
    end
  end

  def view
    #view single document info
    selected = LibraryDocument.column_names - ["category_id", "id"]
    @document = LibraryDocument.find_by_id(params[:document_id], :select => selected)
    if @document.nil?
      flash[:alert] = "Lỗi không tìm thấy tài liệu ID " + params[:document_id].to_s
      redirect_to_library
    else
      LibraryDocument.update(params[:document_id],:view_count => @document.view_count+1)
      @document.status = format_status(@document.status)
    end
  end

  def lend
    # lend books action
    selected = LibraryDocument.column_names - ["category_id", "id", "edited_on"]
    @document = LibraryDocument.find_by_id(params[:document_id], :select => selected)
    #check document exists
    if @document.nil?
      flash[:alert] = "Lỗi không tìm thấy tài liệu ID " + params[:document_id].to_s
      redirect_to_library
    else
      @document.status = format_status(@document.status)
      @borrow_list = LibraryBorrowRecord.joins(:student).order(sort_column(LibraryBorrowRecord, 'borrowed_on') + " " + sort_direction).where('library_borrow_records.library_document_id = ' + params[:document_id].to_s).page(params[:page]).per(20)
      if params[:page].nil?
        params[:page] = 1
      end
    end

    #add records
    if request.post?

      #check user
      if params[:login].nil?
        flash[:alert] = "Cần phải nhập thông tin người mượn tài liệu"
      else
        user = Student.find_by_login(params[:login])
        logger.info('DEBUG')
        logger.info(user)

        if user.nil?
          flash[:alert] = "Lỗi không tìm thấy người dùng"
        else
          if (params[:doc][:student_id]!="") and (user[:id] != params[:doc][:student_id].to_i)
            flash[:alert] = "Lỗi thông tin người dùng không trùng khớp"
          else
            #save data
            params[:doc][:library_document_id] = params[:document_id]
            params[:doc][:student_id] = user[:id]
            params[:doc][:borrowed_on] = Time.now
            params[:doc][:due_date] = params[:doc][:due_date][:date]+' '+params[:doc][:due_date][:time]
            params[:doc][:status] = '1'
            #check existed records

            if LibraryBorrowRecord.find_by_library_document_id_and_student_id_and_status(params[:document_id], user[:id], 1)
              flash[:alert] = "Đã tồn tại thông tin mượn tài liệu tương tự"
            else
              if @document.quantity>=1
                rec = LibraryBorrowRecord.new(params[:doc])
                if rec.save
                  rec.up_count
                  admin_log("Đã ghi nhận "+params[:login]+" mượn tài liệu <strong>\""+@document.title+"\"</strong>", "admin/library")
                  flash[:notice] = "Đã lưu thông tin"
                  redirect_to request.fullpath
                else
                  flash[:alert] = "Lỗi lưu thông tin"
                end
              else
                flash[:alert] = "Số lượng tài liệu không đủ"
              end
            end
          end
        end
      end
      unless flash[:alert].nil?
        redirect_to request.fullpath
      end
    end
  end

  def return
    # return books action
    @record = LibraryBorrowRecord.find_by_id(params[:record_id])
    if @record.nil?
      flash[:alert] = "Lỗi không tìm thấy thông tin phù hợp"
    else
      if @record.update_attributes(:returned_on => Time.now, :status => '0')
        @record.up_quantity_count
        admin_log("Đã nhận lại tài liệu ID: #{params[:document_id]}","admin/library")
        flash[:notice] = "Đã cập nhật thông tin"
      end
    end
    redirect_to :controller => 'backend/library', :action => 'lend', :document_id => params[:document_id]
  end

  def delete
    # delete document
    @document = LibraryDocument.find_by_id(params[:document_id])
    if @document.nil?
      flash[:alert] = "Lỗi không tìm thấy thông tin phù hợp"
      redirect_to_library
    end
    if @document.delete
      admin_log("Đã xóa tài liệu ID: " + params[:document_id].to_s + ", tên tài liệu: <strong>" + @document.title + "</strong>", "admin/library")
      flash[:notice] = "Đã xóa tài liệu ID: "+params[:document_id].to_s
      redirect_to_library
    end
  end

  def borrowlist
    if params[:document_id].nil?
      flash[:alert] = "Lỗi không tìm thấy thông tin"
      redirect_to_library
    else
      @borrow_list = LibraryBorrowRecord.joins(:student,:library_document).where('library_borrow_records.library_document_id = ' + params[:document_id].to_s).page(params[:page]).per(15)
      if @borrow_list.first.nil?
        flash[:alert] = "Lỗi không tìm thấy thông tin"
        redirect_to_library
      end
    end
  end

  def redirect_to_library
    redirect_to :controller => "backend/library", :action => "index"
  end

  def delete_borrow_record
    # return books action
    @record = LibraryBorrowRecord.find_by_id(params[:record_id])
    if @record.nil?
      flash[:alert] = "Lỗi không tìm thấy thông tin phù hợp"
    else
      if LibraryBorrowRecord.delete(params[:record_id])
        admin_log("Đã xóa nhật ký mượn tài liệu ID #{params[:document_id]}, userid = #{@record.student_id}","admin/library")
        flash[:notice] = "Đã xóa thông tin"
      end
    end
    redirect_to :controller => 'backend/library', :action => 'lend', :document_id => params[:document_id]
  end

  def edit_borrow_record
    ###
  end

  def lend_document
    ### search for document, forward to lend
    if params[:search_key].nil?
      @documents = LibraryDocument.page(params[:page]).per(15)
    else
      key = params[:search_key]
      @documents = LibraryDocument.where("title LIKE '%#{key}%' OR summary LIKE '%#{key}%' OR tags LIKE '%#{key}%' OR author LIKE '%#{key}%' OR isbn LIKE '%#{key}%'" ).page(params[:page]).per(15)
    end
  end

  def return_document
    ### search for document, forward to lend
    if params[:search_key].nil?
      @documents = LibraryDocument.page(params[:page]).per(15)
    else
      key = params[:search_key]
      @documents = LibraryDocument.where("title LIKE '%#{key}%' OR summary LIKE '%#{key}%' OR tags LIKE '%#{key}%' OR author LIKE '%#{key}%' OR isbn LIKE '%#{key}%'" ).page(params[:page]).per(15)
    end
  end

  def user_borrow_list
    if params[:user_id].nil?
      flash[:alert] = "Lỗi không tìm thấy thông tin"
      redirect_to_library
    else
      @borrow_list = LibraryBorrowRecord.joins(:student,:library_document).where('library_borrow_records.student_id = ' + params[:user_id].to_s).page(params[:page]).per(15)
      if @borrow_list.first.nil?
        flash[:alert] = "Lỗi không tìm thấy thông tin"
        redirect_to_library
      end
    end
  end
end
